﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;

//发邮件
//https://www.nowcoder.com/questionTerminal/95e35e7f6ad34821bc2958e37c08918b
//int main() {
//    int n = 0;
//    long long arr[21] = { 0,0,1 }; //0个人和1个人都是无法发错
//    //两个人只有两种情况，错误的情况是一种
//    //对于三个人 A B C
//    //要么A和B相互拿到了对方邮件，剩下的就是arr(3-1)的问题了 n-1
//    //要么就是A没拿到B的邮件，就是arr(3-2)的问题了 n-2
//    //这两个情况无论那个成立都少了一个拿错的事件 即 n-1
//    //转换为转移方程：arr[i] = (i-1)*(arr[i-1]+arr[i-2]);
//    for (int i = 3; i < 21; ++i) arr[i] = (i - 1) * (arr[i - 1] + arr[i - 2]);
//    while (cin >> n) {
//        cout << arr[n] << endl;
//    }
//}

//最长上升子序列
//https://www.nowcoder.com/questionTerminal/d83721575bd4418eae76c916483493de
//int main() {
//    int n = 0;
//    while (cin >> n) { // 注意 while 处理多个 case
//        int len = 1;
//        vector<int> arr(n);
//        vector<int> v(n, 1);
//        for (int i = 0; i < n; ++i) cin >> arr[i];
//
//        for (int i = 1; i < n; ++i)
//        {
//            for (int k = i - 1; k >= 0; --k)
//                if (arr[i] > arr[k]) v[i] = max(v[i], v[k] + 1);
//            len = v[i] > len ? v[i] : len;
//        }
//        cout << len << endl;
//    }
//}